package com.tj.collection.integration;

import com.fqgj.common.api.Page;
import com.fqgj.common.api.Response;
import com.qianli.cashmama.product.facade.result.*;
import com.tj.collection.integration.dto.AppBusinessProductDTO;
import com.tj.collection.integration.dto.BusinessProductDTO;

import java.util.List;
import java.util.Map;

/**
 * Created by xiatian on 2017/11/3.
 */
public interface ProductIntegrationService {

    /**
     * 根据app的编码获取产品类目列表
     *
     * @param appCode app的编码
     * @return
     */
    Response<List<ProductCategory>> getProductCategoryList(String appCode);


    /**
     * 查询产品，调用方需要根据active的值判断产品当前是否可用
     *
     * @param productCode 产品类目编码
     * @param selectRules true product中包含规则, false product中不包含规则
     * @return
     */
    Response<Product> getProductDetail(String productCode, boolean selectRules);


    /***
     * 获取所有生效中的产品类目
     * @return
     */
    Response<List<ProductCategory>> getAllActiveProductCategory();


    Response<List<ProductCategory>> getAllActiveProductCategoryByMerchantCode(String merchantCode);

    /**
     * 获取所有产品
     *
     * @param productCategory
     * @return
     */
    Response<List<Product>> getProductList(String productCategory);


    ProductCategory getByProductCategory(String productCategory);

    /**
     * 获取产品信息
     *
     * @param productCodeList
     * @return
     */
    List<Product> getProductList(List<String> productCodeList);

    /**
     * 获取产品信息
     *
     * @param productCodeList
     * @return
     */
    Map<String, Product> getProductMap(List<String> productCodeList);

    List<BusinessProduct> getBusinessProductList();

    List<AppBusinessProduct> getAppBusinessProductList(Integer position);

    List<AppBusinessProduct> getAppBusinessProductList(Integer position, Long businessProductId);

    List<AppBusinessProduct> getAppBusinessProductList(AppBusinessProductDTO appBusinessProductDTO);

    AppBusinessProducts getAppBusinessProductListByPage(Map<String, Object> paramMap, Page page);

    boolean addAppBusinessProduct(AppBusinessProductDTO appBusinessProductDTO);

    boolean addBusinessProduct(BusinessProductDTO businessProductDTO);

    boolean deleteBusinessProduct(Long id);

    List<AppProductCategoryVo> getAllAppProductCategory();

    List<AppVo> getAllApps();

    AppPackageInfo getAppPackageInfoByPackageName(String packageName);
}
